package UseLinkedHashMap;

import java.util.LinkedHashMap;
import java.util.Set;

// 使用LinkedHashMap
/*
* LinkedHashMap继承了HashMap,并在内部维护了一个双向链表
* 以保证元素的顺序 LinkedHashMap支持两种顺序:访问顺序和插入顺序
* */
public class demo {
    public static void main(String[] args) {
        //创建时可以指定参数 第一个参数:初始容量 第二个参数:负载因子（作用:每当负载LinkedHashMap被填充到一定比例时就扩容） 第三个参数:访问顺序(true：访问顺序，false：插入顺序)
        LinkedHashMap<String,Integer> linkedHashMap = new LinkedHashMap<>(16,0.75f,true);
        // 插入元素
        linkedHashMap.put("name",1);
        linkedHashMap.put("age",2);
        // 获得元素 如果按访问顺序排序，会将访问的元素移到链表尾部。
        Integer name = linkedHashMap.get("name");
        System.out.println("name = " + name);
        linkedHashMap.put("name2",1);
        // 判断该链表是否含有一个或者多个该值
        boolean hasValue = linkedHashMap.containsValue(1);
        System.out.println("b = " + hasValue);
        // 获得所有键的集合
        Set<String> strings = linkedHashMap.keySet();
        for (String string : strings) {
            System.out.println("string = " + string);
        }
        // 获得该键对应的值 如果没有则返回默认值 后面指定的
        Integer name3 = linkedHashMap.getOrDefault("name3", 8);
        System.out.println("name3 = " + name3);
    }
}
